package cn.iocoder.yudao.module.engine.util;

import ws.schild.jave.*;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;

import java.io.*;

// https://github.com/a-schild/jave2
public class AudioConverterUtils {

    /**
     * 将输入流中的 WebM 格式音频转换为 MP3 格式并返回字节数组。
     *
     * @param inputStream  WebM 音频输入流
     * @return MP3 格式的字节数组
     * @throws IOException 如果发生 IO 错误
     */
    public static byte[] convertWebmToMp3(InputStream inputStream) throws IOException {
        // 创建临时输入文件
        File tempInputFile = File.createTempFile("input", ".webm");
        try (OutputStream tempOut = new FileOutputStream(tempInputFile)) {
            inputStream.transferTo(tempOut);
        }

        // 创建临时输出文件
        File tempOutputFile = File.createTempFile("output", ".mp3");

        // 使用 ByteArrayOutputStream 来存储输出的字节数组
        try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
            // 配置音频编码参数
            AudioAttributes audio = new AudioAttributes();
            audio.setCodec("libmp3lame");  // 使用 MP3 编码器
            audio.setBitRate(128000);     // 比特率
            audio.setChannels(2);         // 声道数
            audio.setSamplingRate(44100); // 采样率

            EncodingAttributes attrs = new EncodingAttributes();
            attrs.setInputFormat("webm");
            attrs.setOutputFormat("mp3");
            attrs.setAudioAttributes(audio);

            // 使用 JAVE 转码
            Encoder encoder = new Encoder();
            encoder.encode(new MultimediaObject(tempInputFile), tempOutputFile, attrs);

            // 将输出文件内容写入 ByteArrayOutputStream
            try (InputStream tempInput = new FileInputStream(tempOutputFile)) {
                tempInput.transferTo(byteArrayOutputStream);
            }
            // 返回转换后的字节数组
            return byteArrayOutputStream.toByteArray();
        } catch (EncoderException e) {
            throw new RuntimeException(e);
        } finally {
            // 删除临时文件
            tempInputFile.delete();
            tempOutputFile.delete();
        }
    }


    public static void main(String[] args) throws Exception {
        File tempInputFile = File.createTempFile("input", ".webm");
        System.out.println(tempInputFile);
    }

}
